﻿Imports ConexionBD
Imports System.Data.Common

Public Class Usuario
    Public codUsuario As String
    Public nomUsuario As String
    Public perfil As String
    Public fecha As Date
    Public clave As String

    '' retorna 1 el usuario no existe
    '' retorna 2 el usuario contraseña incorrecta
    '' retorna 3 el usuario validado
    Public Shared Function Login(usuario As String, clave As String) As Integer
        Dim resultado As Integer
        If existUser(usuario) Then
            Dim user As New GBDZafiro.Usuario
            user.codUsuario = usuario
            user.clave = clave
            If ConsxCodUsuarioClave(user) Then
                resultado = 3
            Else
                resultado = 2
            End If
        Else
            resultado = 1
        End If
        Return resultado
    End Function

    Public Shared Function existUser(usuario As String) As Boolean
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from USUARIO where cod_usuario=@P_USUARIO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario, "P_USUARIO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If

        If dtConsulta.Rows.Count <= 0 Then
            Return False
        Else
            Return True
        End If

    End Function

    Public Shared Function ConsxCodUsuarioClave(usuario As GBDZafiro.Usuario) As Boolean
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "SELECT * FROM USUARIO WHERE COD_USUARIO=@P_USUARIO AND PWDCOMPARE('" & usuario.clave & "',CLAVE) =1"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.codUsuario, "P_USUARIO"))
            'conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, clave, "CLAVE"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If

        If dtConsulta.Rows.Count > 0 Then
            Return True
        Else
            Return False
        End If

    End Function

    Public Shared Function ConsxCodUsuario(usuario As String) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from USUARIO where cod_usuario=@P_USUARIO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario, "P_USUARIO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsultarAll() As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from USUARIO"
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function Nuevo(usuario As Usuario) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            sentencia = "INSERT INTO USUARIO(COD_USUARIO, NOM_USUARIO, PERFIL, CLAVE) VALUES (@COD_USUARIO,@NOM_USUARIO,@PERFIL, PwdEncrypt(@CLAVE))"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.codUsuario, "COD_USUARIO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.nomUsuario, "NOM_USUARIO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.perfil, "PERFIL"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.clave, "CLAVE"))
            oResultado.ExisteError = conexion.EjecutarSql(sentencia)
            oResultado.FilasAfectadas = conexion.NumFilasAfectadas
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function Actualizar(usuario As Usuario) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            sentencia = "update usuario set nom_usuario=@NOM_USUARIO,perfil=@PERFIL where cod_usuario=@COD_USUARIO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.codUsuario, "COD_USUARIO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.nomUsuario, "NOM_USUARIO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.perfil, "PERFIL"))
            oResultado.ExisteError = conexion.EjecutarSql(sentencia)
            oResultado.FilasAfectadas = conexion.NumFilasAfectadas
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function ActualizarClave(usuario As Usuario) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            sentencia = "update usuario set clave=PwdEncrypt(@CLAVE) where cod_usuario=@COD_USUARIO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.codUsuario, "COD_USUARIO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.clave, "CLAVE"))
            oResultado.ExisteError = conexion.EjecutarSql(sentencia)
            oResultado.FilasAfectadas = conexion.NumFilasAfectadas
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function Eliminar(usuario As Usuario) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            sentencia = "delete from usuario where cod_usuario=@COD_USUARIO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, usuario.codUsuario, "COD_USUARIO"))
            oResultado.ExisteError = conexion.EjecutarSql(sentencia)
            oResultado.FilasAfectadas = conexion.NumFilasAfectadas
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function existPerfilUsuario(perfil As GBDZafiro.Perfil) As Boolean
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from USUARIO where perfil=@PERFIL"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, perfil.perfil, "PERFIL"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If

        If dtConsulta.Rows.Count < 1 Then
            Return False
        Else
            Return True
        End If

    End Function

End Class
